#pragma once

#include "Mathematics.h"

// Axis Aligned Bounding Box
class aabb {
public:
	inline void setMin (const Vector3f &v) { _min = v; }
	inline void setMax (const Vector3f &v) { _max = v; }
	inline void setMinMax (const Vector3f &min, const Vector3f &max) { setMin(min), setMax(max); }

	inline Vector3f getMin () const { return _min; }
	inline Vector3f getMax () const { return _max; }

	inline void getPoints (Vector3f vec[8]) const {
		/* LBN, LUN, RUN, RDN, LBF, LUF, RUF, RDF */
		vec[0].set(_min.x(), _min.y(), _min.z());
		vec[1].set(_min.x(), _max.y(), _min.z());
		vec[2].set(_max.x(), _max.y(), _min.z());
		vec[3].set(_max.x(), _min.y(), _min.z());
		vec[4].set(_min.x(), _min.y(), _max.z());
		vec[5].set(_min.x(), _max.y(), _max.z());
		vec[6].set(_max.x(), _max.y(), _max.z());
		vec[7].set(_max.x(), _min.y(), _max.z());
	}

private:
	Vector3f _min;
	Vector3f _max;
};